package GUI
{
	import DAL.Conexion;
	import DAL.PreguntaAbiertaDAO;
	import DAL.RespuestaDAO;
	
	import MUNDO.Partida;
	
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
	import flash.globalization.NumberParseResult;
	import flash.text.TextField;
	import flash.utils.Timer;

	public class PreguntaAbierta
	{
		//Atributos
		private var _triviador:Triviador = null;
		private var teclado0Button:Teclado0Button = new Teclado0Button();
		private var teclado1Button:Teclado1Button = new Teclado1Button();
		private var teclado2Button:Teclado2Button = new Teclado2Button();
		private var teclado3Button:Teclado3Button = new Teclado3Button();
		private var teclado4Button:Teclado4Button = new Teclado4Button();
		private var teclado5Button:Teclado5Button = new Teclado5Button();
		private var teclado6Button:Teclado6Button = new Teclado6Button();
		private var teclado7Button:Teclado7Button = new Teclado7Button();
		private var teclado8Button:Teclado8Button = new Teclado8Button();
		private var teclado9Button:Teclado9Button = new Teclado9Button();
		private var tecladoBorrarButton:TecladoBorrarButton = new TecladoBorrarButton();
		private var tecladoEnviarButton:TecladoEnviarButton = new TecladoEnviarButton();
		private var preguntaLabel:TextField = new TextField();
		private var nombreLabel:TextField = new TextField();
		private var respuestaAbierta:TextField = new TextField();
		private var _timer15Seg:Timer = null;
		private var _aleatorio:Number = 0;
		
		public function PreguntaAbierta(triviador:Triviador, timer15Seg:Timer,numero:int)
		{
			trace ("aleatoreo recibido num: "+numero);
			_triviador = triviador;
			_timer15Seg = timer15Seg;
			_aleatorio =  new Number(numero);
			trace ("aleatoreo: "+_aleatorio);
		}
		
		/** Esta funcion muestra una pregunta abierta, con un cuadro de texto donde el
		 * usuario puede introducir la respuesta que quiera.
		 * @param numero Numero aleatorio para elegir la pregunta de la base de preguntas
		 */
		public function MostrarPreguntaAbierta(numero:Number):void {
			_triviador.stop();
			_triviador.gotoAndPlay(1,"Escena 5");
			var preguntaAbiertaDAO:PreguntaAbiertaDAO = new PreguntaAbiertaDAO(_triviador, _timer15Seg);
			preguntaAbiertaDAO.cargarEnunciadoPreguntaAbierta(Partida.client , "P" + numero);
		}
		
		/**
		 * Muestra en la ventana al usuario los campos donde se mostrará la pregunta, teclado virtual y respuesta
		 */
		public function dibujarMostrarPreguntaAbierta(enunciado:String):void {						
			//Construccion campo de la pregunta
			preguntaLabel.height = 33;
			preguntaLabel.width = 500;
			preguntaLabel.border = true;
			preguntaLabel.borderColor = 0xD7A500;
			preguntaLabel.textColor = 0xD7A500;
			preguntaLabel.background = true;
			preguntaLabel.backgroundColor = 0x000000;
			preguntaLabel.x = 14;
			preguntaLabel.y = 20;
			preguntaLabel.wordWrap = true;
			preguntaLabel.selectable = false;
			preguntaLabel.setTextFormat(Utils.formatearTextos());
			preguntaLabel.text = enunciado;
			
			_triviador.addChild(preguntaLabel);
			
			//Construccion del campo del Nombre del Jugador
			nombreLabel = new TextField();
			nombreLabel.height = 40;
			nombreLabel.width = 169;
			nombreLabel.border = false;
			nombreLabel.x = 10;
			nombreLabel.y = 300;
			nombreLabel.text = Partida.jugador.nombre;
			nombreLabel.setTextFormat(Utils.formatearTitulos());
			_triviador.addChild(nombreLabel);
			
			//Construccion del campo para responder la pregunta
			respuestaAbierta = new TextField();
			respuestaAbierta.height = 15;
			respuestaAbierta.width = 30;
			respuestaAbierta.border = true;
			respuestaAbierta.borderColor = 0xD7A500;
			respuestaAbierta.background = true;
			respuestaAbierta.backgroundColor = 0xFFFFFF;
			respuestaAbierta.x = 230;
			respuestaAbierta.y = 150;
			respuestaAbierta.setTextFormat(Utils.formatearTitulos());
			respuestaAbierta.scaleX = 2.0;
			respuestaAbierta.scaleY = 2.0;
			_triviador.addChild(respuestaAbierta);
			
			_triviador.addChild(teclado0Button);
			_triviador.addChild(teclado1Button);
			_triviador.addChild(teclado2Button);
			_triviador.addChild(teclado3Button);
			_triviador.addChild(teclado4Button);
			_triviador.addChild(teclado5Button);
			_triviador.addChild(teclado6Button);
			_triviador.addChild(teclado7Button);
			_triviador.addChild(teclado8Button);
			_triviador.addChild(teclado9Button);
			_triviador.addChild(tecladoBorrarButton);
			_triviador.addChild(tecladoEnviarButton);
			
			teclado0Button.addEventListener(MouseEvent.CLICK, onClickTeclado0Button);
			teclado1Button.addEventListener(MouseEvent.CLICK, onClickTeclado1Button);
			teclado2Button.addEventListener(MouseEvent.CLICK, onClickTeclado2Button);
			teclado3Button.addEventListener(MouseEvent.CLICK, onClickTeclado3Button);
			teclado4Button.addEventListener(MouseEvent.CLICK, onClickTeclado4Button);
			teclado5Button.addEventListener(MouseEvent.CLICK, onClickTeclado5Button);
			teclado6Button.addEventListener(MouseEvent.CLICK, onClickTeclado6Button);
			teclado7Button.addEventListener(MouseEvent.CLICK, onClickTeclado7Button);
			teclado8Button.addEventListener(MouseEvent.CLICK, onClickTeclado8Button);
			teclado9Button.addEventListener(MouseEvent.CLICK, onClickTeclado9Button);
			tecladoBorrarButton.addEventListener(MouseEvent.CLICK, onClickTecladoBorrarButton);
			tecladoEnviarButton.addEventListener(MouseEvent.CLICK, onClickTecladoEnviarButton);
		}
		
		/**
		 * Función que crea el evento cuando se da clic al botón 0
		 * @param mouseEvent Captura en evento clic		
		 */
		public function onClickTeclado0Button( mouseEvent:MouseEvent):void
		{
			if (respuestaAbierta.text.length<4) {
				respuestaAbierta.appendText("0");
			}
		}
		
		/**
		 * Función que crea el evento cuando se da clic al botón 1
		 * @param mouseEvent Captura en evento clic		
		 */
		public function onClickTeclado1Button( mouseEvent:MouseEvent):void
		{
			if (respuestaAbierta.text.length<4) {
				respuestaAbierta.appendText("1");
			}
		}
		
		/**
		 * Función que crea el evento cuando se da clic al botón 2
		 * @param mouseEvent Captura en evento clic		
		 */
		public function onClickTeclado2Button( mouseEvent:MouseEvent):void
		{
			if (respuestaAbierta.text.length<4) {
				respuestaAbierta.appendText("2");
			}
		}
		
		/**
		 * Función que crea el evento cuando se da clic al botón 3
		 * @param mouseEvent Captura en evento clic		
		 */
		public function onClickTeclado3Button( mouseEvent:MouseEvent):void
		{
			if (respuestaAbierta.text.length<4) {
				respuestaAbierta.appendText("3");
			}
		}
		
		/**
		 * Función que crea el evento cuando se da clic al botón 4
		 * @param mouseEvent Captura en evento clic		
		 */
		public function onClickTeclado4Button( mouseEvent:MouseEvent):void
		{
			if (respuestaAbierta.text.length<4) {
				respuestaAbierta.appendText("4");
			}
		}
		
		/**
		 * Función que crea el evento cuando se da clic al botón 5
		 * @param mouseEvent Captura en evento clic		
		 */
		public function onClickTeclado5Button( mouseEvent:MouseEvent):void
		{
			if (respuestaAbierta.text.length<4) {
				respuestaAbierta.appendText("5");
			}
		}
		
		/**
		 * Función que crea el evento cuando se da clic al botón 6
		 * @param mouseEvent Captura en evento clic		
		 */
		public function onClickTeclado6Button( mouseEvent:MouseEvent):void
		{
			if (respuestaAbierta.text.length<4) {
				respuestaAbierta.appendText("6");
			}
		}
		
		/**
		 * Función que crea el evento cuando se da clic al botón 7
		 * @param mouseEvent Captura en evento clic		
		 */
		public function onClickTeclado7Button( mouseEvent:MouseEvent):void
		{
			if (respuestaAbierta.text.length<4) {
				respuestaAbierta.appendText("7");
			}
		}
		
		/**
		 * Función que crea el evento cuando se da clic al botón 8
		 * @param mouseEvent Captura en evento clic		
		 */
		public function onClickTeclado8Button( mouseEvent:MouseEvent):void
		{
			if (respuestaAbierta.text.length<4) {
				respuestaAbierta.appendText("8");
			}
		}
		
		/**
		 * Función que crea el evento cuando se da clic al botón 9
		 * @param mouseEvent Captura en evento clic		
		 */
		public function onClickTeclado9Button( mouseEvent:MouseEvent):void
		{
			if (respuestaAbierta.text.length<4) {
				respuestaAbierta.appendText("9");
			}
		}
		
		/**
		 * Función que crea el evento cuando se da clic al botón Enviar
		 * @param mouseEvent Captura en evento clic		
		 */
		public function onClickTecladoBorrarButton( mouseEvent:MouseEvent):void
		{
			respuestaAbierta.text = respuestaAbierta.text.substr(0,respuestaAbierta.text.length-1);
		}

		//INICIO************************************************************************************************************************************************+
		/**
		 * Valida la respuesta que ha dado el usuario, luego se le notifica al servidor si ha respondido
		 * bien o mal el usuario.
		 * @param mouseEvent Evento generado por el usuario al dar click en enviar para enviar su respuesta a validacion
		 */
		public function onClickTecladoEnviarButton( mouseEvent:MouseEvent):void
		{
			_triviador.stop();
			_triviador.gotoAndStop(2,"Escena 6");
			_timer15Seg.stop();
			_timer15Seg.removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
			trace ("Respuesta ");
			trace (" ");
			trace ("HAS SELECCIONADO:  " + respuestaAbierta.text );
			var validar:RespuestaDAO = new RespuestaDAO(respuestaAbierta.text , "P"+_aleatorio , "abierta", _triviador);
			if (validar.perdio == true)
			{
				trace("Respondio mal");
				//_triviador.gotoAndStop(1,"Escena 7");
			}
		}
		
		/**
		 * La funcion indica al servidor que al usuario se le ha agotado el tiempo, por tanto ha perdido y 
		 * se lo notifica al servidor y al usuario.
		 * @param event Evento que indica que el tirmpo que tiene el usuario se ha acabado
		 */
		public function onTimerComplete(event:TimerEvent):void 
		{ 
			trace("Time's Up!");
			var conexion:Conexion = new Conexion(_triviador);
			conexion.enviarPerderAbiertas();
			trace("Tiempo agotado PREGUNTA ABIERTA");
			//_triviador.gotoAndStop(1,"Escena 7");
		}
//************************************************************************************************************************
	}
}